package java51_0607;

import java.io.File;
import java.io.FileInputStream;
import java.util.Scanner;

//*4：常用图片的格式可以通过读取文件头部分获得：
//常用图片的格式可以通过读取文件头部分获得(16进制)：
//（1）JPEG
//- 文件头标识 (2 bytes): 0xff, 0xd8 (SOI) (JPEG 文件标识)
//（3）PNG
//- 文件头标识 (8 bytes)   89 50 4E 47 0D 0A 1A 0A
//（4）GIF
//- 文件头标识 (6 bytes)   47 49 46 38 39(37) 61 
//（5）BMP
//- 文件头标识 (2 bytes)   42 4D，字符即：B  M
//输入一个文件名，判断其真正格式和其文件类型是否匹配
//（防止直接给文件改名，比如把一个jpg改成bmp或者把一个rar改成jpg）
public class FileNameTest {

	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入读取的文件名：");
		String s = sc.nextLine();
		// 获取文件名
		File f = new File(s);
		String fname = f.getName();

		int choice = 9;// 随机给定一个大于数组长度值
		FileInputStream os = new FileInputStream(f);
		// 获取文件后缀
		String suffix = fname.substring(fname.lastIndexOf(".") + 1);
		String st[] = { "jpeg", "png", "gif", "bmp" };
		// 获取输入的文件对应的后缀，取下标
		for (int i = 0; i < st.length; i++) {
			if (st[i].equals(suffix)) {
				choice = i;
				break;
			}
		}
		// 通过输入的后缀名进制文件开头16进制读取，判断是否匹配
		switch (choice) {
		case 0:
			StringBuffer sb = new StringBuffer();
			sb = null;
			byte b0[] = new byte[10];
			int len = os.read(b0, 0, 2);
			for (int i = 0; i < len; i++) {
				sb = sb.append(Integer.toHexString(b0[i]));
			}
			if (sb.equals("0xff0xd8")) {
				System.out.println("文件匹配！！");
			} else {
				System.out.println("不匹配！！");
			}
			os.close();
			break;
		case 1:
			StringBuffer sb1 = new StringBuffer();
			sb1 = null;
			byte b1[] = new byte[10];
			int len1 = os.read(b1, 0, 8);
			for (int i = 0; i < len1; i++) {
				sb1 = sb1.append(Integer.toHexString(b1[i]));
			}
			if (sb1.equals("89504E470D0A1A0A")) {
				System.out.println("文件匹配！！");
			} else {
				System.out.println("不匹配！！");
			}
			os.close();
			break;
		case 2:
			StringBuffer sb2 = new StringBuffer();
			sb2 = null;
			byte b2[] = new byte[10];
			int len2 = os.read(b2, 0, 6);
			for (int i = 0; i < len2; i++) {
				sb2 = sb2.append(Integer.toHexString(b2[i]));
			}
			if (sb2.equals("474946383961") || sb2.equals("474946383761")) {
				System.out.println("文件匹配！！");
			} else {
				System.out.println("不匹配！！");
			}
			os.close();
			break;
		case 3:
			StringBuffer sb3 = new StringBuffer();
			sb3 = null;
			byte b3[] = new byte[10];
			int len3 = os.read(b3, 0, 2);
			for (int i = 0; i < len3; i++) {
				sb3 = sb3.append(Integer.toHexString(b3[i]));
			}
			if (sb3.equals("424D")) {
				System.out.println("文件匹配！！");
			} else {
				System.out.println("不匹配！！");
			}
			os.close();
			break;
		default:
			System.out.println("无该图片判断格式");

		}

	}

}
